跳到主要内容

NC41 最长无重复子数组

https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4

package main

/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
func maxLength(arr []int) int {
m := make(map[int]int)
left, result := -1, 0
for right := 0; right < len(arr); right++ {
// 如果存在重复的,则移动下标
if _, ok := m[arr[right]]; ok {
// 因为有可能遇到的重复数字的位置 比 left 还要前
// 例如 [3,3,2,1,3,3,3,1] 这里 right 为 7 时(这里的最后一个 1),而 m 里面 1 的下标为 3,那就导致 left 变成了 3
// 所以不能把直接把 left 置于该位置前一位,而是先比较哪个最大,总之目的还是为了缩小窗口(就是不能让 left 变小)
left = Max(left, m[arr[right]])
}

// 将数字位置更新到 Map 中
m[arr[right]] = right
// 更新结果
result = Max(result, right-left)
}

return result
}

func Max(a, b int) int {
if a > b {
return a
}
return b
}